package other;

import utils.TreeNode;

public class minCameraCover_968 {
    public int minCameraCover(TreeNode root) {
        if (root == null) return 0;
        int flag = install(root); //根节点状态
        return flag==0 ? result+1:result;
    }

    int result = 0;

    /**
     * @return 返回0代表，未被覆盖，1代表已被覆盖未安装, 2 ，代表已经安装
     */
    public int install(TreeNode root) {
        if (root == null)//空节点必须被覆盖，保证叶子节点不安装
            return 1; //未被覆盖
        //后续遍历
        int flag1 = install(root.left);
        int flag2 = install(root.right);
        //孩子节点被覆盖，无需安装
        if (flag1 == 1 && flag2 == 1)
            return 0;
        if (flag1 == 0 || flag2 == 0) {   //任意一个未被覆盖，就要安装
            result += 1;
            return 2;
        }
        if (flag1 == 2 || flag2 == 2)   //任意一个安装，被覆盖
            return 1;
        return 0;
    }
}
